Фрагмент ниже работает на JSFiddle . Не забудьте включить всплывающие окна для chrome, если вы хотите, чтобы ваши всплывающие окна не блокировались chrome , взгляните на этот вопрос.
function PrintImage() {
id = 'chart';
var canvas = document.getElementById(id);
var win = window.open(canvas.toDataURL(), '_blank');
win.document.write("
");
win.print();
win.location.reload();
}
function drawImage(){
var ctx = $("canvas")[0].getContext("2d"),
img = new Image();
img.onload = function(){
ctx.drawImage(img, 0, 0, 500, 500);
$("span").text("Loaded.");
};
img.src = "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ7udaoWuG0i57WCc7OyxkWG0jCkqMIBa7D7ff2Dk1Fk7rCsoQr";
img.crossOrigin ="anonymous";
$("span").text("Loading...");
}
$("#add").click(drawImage);
$("#print").click(PrintImage);
Canvas Replace
Попытка:
SELECT into #T1 execute ('execute ' + @SQLString )
И это пахнет очень плохо как уязвимость внедрения SQL.
<час>исправление (на комментарий @CarpeDiem):
INSERT into #T1 execute ('execute ' + @SQLString )
также, опустите 'execute'
, если строка sql - что-то другое, чем процедура
Не уверенный, если я понимаю хорошо, но возможно Вы могли бы сформировать оператор CREATE в строке, затем выполнить ту Строку? Тем путем Вы могли добавить столько столбцов, сколько Вы хотите.
Таблицу можно определять динамически точно так же, как вы динамически вставляете в нее, но проблема заключается в области временных таблиц. Например, этот код:
DECLARE @sql varchar(max)
SET @sql = 'CREATE TABLE #T1 (Col1 varchar(20))'
EXEC(@sql)
INSERT INTO #T1 (Col1) VALUES ('This will not work.')
SELECT * FROM #T1
вернет ошибку «Недопустимое имя объекта '# T1'». Это связано с тем, что временная таблица № T1 создается на «более низком уровне», чем блок выполнения кода. Чтобы исправить это, используйте глобальную временную таблицу:
DECLARE @sql varchar(max)
SET @sql = 'CREATE TABLE ##T1 (Col1 varchar(20))'
EXEC(@sql)
INSERT INTO ##T1 (Col1) VALUES ('This will work.')
SELECT * FROM ##T1
Надеюсь, это поможет, Джесси