На самом деле не уверен в 2005 году, но 2008 год съел его:
USE [DATABASE_NAME] -- !
GO
DECLARE @SQL NVARCHAR(MAX)
DECLARE @TableName VARCHAR(255)
SET @TableName = 'TABLE_NAME' -- !
SELECT @SQL =
(
SELECT
CHAR(10)
+'DELETE FROM ['+t1.TABLE_CATALOG+'].['+t1.TABLE_SCHEMA+'].['+t1.TABLE_NAME+'] WHERE '
+(
SELECT
CASE t2.ORDINAL_POSITION
WHEN (SELECT MIN(t3.ORDINAL_POSITION) FROM INFORMATION_SCHEMA.COLUMNS t3 WHERE t3.TABLE_NAME=t2.TABLE_NAME) THEN ''
ELSE 'AND '
END
+'['+COLUMN_NAME+'] IS NULL' AS 'data()'
FROM INFORMATION_SCHEMA.COLUMNS t2 WHERE t2.TABLE_NAME=t1.TABLE_NAME FOR XML PATH('')
) AS 'data()'
FROM INFORMATION_SCHEMA.TABLES t1 WHERE t1.TABLE_NAME = @TableName FOR XML PATH('')
)
SELECT @SQL -- EXEC(@SQL)
Я не уверен, что это именно то, что вы ищете, но я сделал пример о том, как создать программную маску с помощью скрипта в MATLAB / Simulink. Я не буду использовать get_param
/ set_param
, даже если можно получить те же результаты с помощью этих команд. Мы поедем с объектом Simulink
, который будет проще и понятнее (по крайней мере, IMHO).
Для нашей игровой площадки создадим эту простую подсистему (block
) с простой константой, которая дает в выводе имя переменной с именем a
, которую мы хотим взять из маски:
Посмотрите адрес этого блока. Моя модель simulink mask.slx
, поэтому я могу адресовать эту подгруппу с адресом mask/block
(верхний левый угол окна просмотра), как вы можете видеть здесь:
В этот момент мы можем использовать следующий код для добавления поля редактирования для подгруппы, в котором исправлено значение a
:
clc
clear all
% The subgroup for which we want to programmatically create a mask
block_name = 'mask/block';
% Now we can create the mask parameter programmatically as you requested
% There are two way: the old one using get_param and set_param and a more
% clear one using the Simulink interface.
% I will go with thw second one, since it is really more straightforward
% with respect to the first one.
% The first think to do is to create the mask itself
% If the mask already exist, we would get an error, thus we can avoid it by
% checking if it already exist. This is something that you should check out.
mask_hdl = Simulink.Mask.create(block_name);
% mask_hdl = Simulink.Mask.get(block_name); % For use an existing mask
% Now we are ready to create the mask parameters:
edit_a_hdl = mask_hdl.addParameter( ...
'Type', 'edit', ...
'Prompt', 'Sets constant variable', ...
'Name', 'a');
edit_a_hdl.Value = '10';
Запуск сценария кода будет быть замаскированным, и переменная будет установлена, как вы можете видеть здесь:
Здесь есть дополнительная информация .
Теперь скажем, что у вас есть площадка, как и раньше, и у вас есть подгруппа, замаскированная как на последнем изображении. Вы можете установить его значение в маске программно (или получить) через get_param
и set_param
следующим образом:
value = get_param(block_name, 'a');
value = str2double(value); % Values should always be string!
% Thus we must convert it
set_param(block_name, 'a', sprintf('%d', value * 100));
и, как вы можете видеть, значение теперь обновлено:
Опять же, вы можете достичь того же результата с помощью объекта Simulink
.
mask_hdl = Simulink.Mask.get(block_name);
edit_a_hdl = mask_hdl.Parameters(1); % We know its position in the struct array
value = str2double(edit_a_hdl.Value);
value = value * pi;
edit_a_hdl.Value = sprintf('%f', value);
и, как вы можете см. наше новое значение:
Блоки Simulink во многих наборах инструментов создаются с использованием объектов системы MATLAB. Если вы хотите создать новый параметр для существующего блока Simulink, вы можете создать общедоступное свойство в отправленном объектном коде системы. Если вы создаете свой собственный блок Simulink, то для написания кода в системных объектах MATLAB будет очень удобно изменять / создавать параметры по вашему желанию.
Объект системы Simulink можно создать следующим образом:
Чтобы создать блок Simulink из объекта System, создайте блок «MATLAB system» из существующих блоков Simulink и вызовите системный объект из системы MATLAB.
Все общедоступные свойства в системном объектном коде видны в диалоговом окне маски Simulink, как показано на рисунке ниже.